#ifndef FORMCHATROOM_H
#define FORMCHATROOM_H

#include "FormBaseWidget.h"
#include "components/CommonFunc.h"
#include "components/netServer/netComponents.h"

class FormChatRoom : public BaseFormWidget
{
    Q_OBJECT
public:
    FormChatRoom(QWidget * parent = nullptr);

    ~FormChatRoom();

private:
    // 资源释放
    void release();
    // 创建主要控件
    void newMainFunc();
    // 创建功能按钮
    void newFuncPtb();
    // 消息获取线程
    void threadMsgProc();

private slots:
    // 连接到服务端
    void slt_Connect();
    // 断开服务
    void slt_Disconnect();
    // 刷新数据
    void slt_Update();
    // 清空数据
    void slt_Clear();
    // 发送数据
    void slt_Send();
    // 展示数据
    void slt_ShowMsgInfo(QString strInfo, QString strMsg);
    // 更新节点状态
    void stl_UpdateNodeStatus(QList<NODE_INFO> listNodeStatus);

signals:
    // 消息线程异步消息信号触发到界面展示
    void sengMsg2Show(QString strInfo, QString strMsg);
    // 发送上线或掉线好友列表
    void sendListNodeStatus(QList<NODE_INFO> listNodeStatus);

private:
    std::string         m_strNodeId;        // 本节点ID
    bool                m_bExit;            // 线程退出信号
    std::thread         m_thMsgProc;        // 侦听线程
    nodeClient*         m_pNodeClient;      // 网络客户端

    QLineEdit*          m_pClientID;        // 客户端ID
    QLineEdit*          m_pServerIP;        // 服务端IP地址
    QLineEdit*          m_pServerPort;      // 服务端端口
    QLineEdit*          m_pServerKey;       // 服务端口令

    QPushButton*        m_pBtnConnect;      // 连接按钮
    QPushButton*        m_pBtnDisConnect;   // 断开按钮

    QTextBrowser*       m_pFriendInfo;      // 群友列表（暂定）
    QTextBrowser*       m_pMsgShowInfo;     // 群组消息
    QTextEdit*          m_pMsgInput;        // 消息输入窗口
};

#endif // FORMCHATROOM_H
